﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DMA.SGDB.DAL;
using DMA.SGDB.Util;
using System.Data;

namespace DMA.SGDB.BLL
{
    public class ClientePJBLL
    {
        ClientePJDAL clientePJDal;

        public void Insert(CLIENTES_PJ cliente)
        {
            try
            {
                clientePJDal = new ClientePJDAL();
                clientePJDal.Insert(cliente);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public String Update(CLIENTES_PJ cliente)
        {
            try
            {
                clientePJDal = new ClientePJDAL();
                clientePJDal.Update(cliente);

                return "Registro atualizado com sucesso!";
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public String Delete(int idCliente)
        {
            try
            {
                clientePJDal = new ClientePJDAL();
                clientePJDal.Delete(idCliente);

                return "Registro excluído com sucesso!";
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable GetAll()
        {
            try
            {
                clientePJDal = new ClientePJDAL();
                IList<CLIENTES_PJ> allRecords = clientePJDal.GetAll();
                return CreateTable(allRecords, null);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public CLIENTES_PJ LoadById(int idCLIENTES_PJ)
        {
            try
            {
                clientePJDal = new ClientePJDAL();
                return clientePJDal.LoadById(idCLIENTES_PJ);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public String GetDuplicateRecord(CLIENTES_PJ cliente)
        {
            try
            {
                clientePJDal = new ClientePJDAL();
                IList<CLIENTES_PJ> duplicateRecord = clientePJDal.GetDuplicateRecord(cliente);

                if (duplicateRecord == null || duplicateRecord.Count == 0)
                    return null;
                else
                    return "Cliente já cadastrado com o nome " + duplicateRecord.First().NOME_CLI + ".";
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public IList<CLIENTES_PJ> GetDuplicateDescription(CLIENTES_PJ cliente)
        {
            try
            {
                clientePJDal = new ClientePJDAL();
                IList<CLIENTES_PJ> duplicateName = clientePJDal.GetDuplicateDescription(cliente);
                return duplicateName;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<String> ValidateFields(CLIENTES_PJ clientePJ)
        {
            try
            {
                List<String> emptyFields = new List<String>();

                if (string.IsNullOrEmpty(clientePJ.RAZAO_CLI))
                    emptyFields.Add("<b>'Razão Social'</b>: Campo obrigatório. ");
                if (string.IsNullOrEmpty(clientePJ.NOME_CLI))
                    emptyFields.Add("<b>'Nome Fantasia'</b>: Campo obrigatório. ");
                if (string.IsNullOrEmpty(clientePJ.CNPJ_CLI))
                    emptyFields.Add("<b>'CNPJ'</b>: Campo obrigatório. ");
                if (clientePJ.DTA_NSC_CLI.Year.ToString() == "1500")
                    emptyFields.Add("<b>'Data de Fundação'</b>: Campo obrigatório. ");
                if (string.IsNullOrEmpty(clientePJ.TEL_CLI))
                    emptyFields.Add("<b>'Telefone'</b>: Campo obrigatório.  ");
                if (string.IsNullOrEmpty(clientePJ.RES_CLI))
                    emptyFields.Add("<b>'Responsável'</b>: Campo obrigatório.  ");
                if (string.IsNullOrEmpty(clientePJ.END_CLI))
                    emptyFields.Add("<b>'Endereço'</b>: Campo obrigatório.  ");
                if (string.IsNullOrEmpty(clientePJ.CEP_CLI))
                    emptyFields.Add("<b>'CEP'</b>: Campo obrigatório.  ");
                if (string.IsNullOrEmpty(clientePJ.CID_CLI))
                    emptyFields.Add("<b>'Cidade'</b>: Campo obrigatório.  ");
                if (string.IsNullOrEmpty(clientePJ.CEP_CLI))
                    emptyFields.Add("<b>'E-mail'</b>: Campo obrigatório.  ");

                if (emptyFields.Count == 0 || emptyFields == null)
                    return null;
                else
                    return emptyFields;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public bool ValidateCNPJ(String cnpj)
        {
            return new ValidacaoCNPJ().ValidarCNPJ(cnpj);
        }

        private DataTable CreateColumns(DataTable table)
        {
            try
            {
                table.Columns.Add("ID");
                table.Columns.Add("Razão Social");
                table.Columns.Add("Nome Fantasia");
                table.Columns.Add("CNPJ");
                table.Columns.Add("Data de Fundação");
                table.Columns.Add("Telefone");
                table.Columns.Add("Responsável");
                table.Columns.Add("Endereço");
                table.Columns.Add("CEP");
                table.Columns.Add("Cidade");
                table.Columns.Add("E-mail");
                table.Columns.Add("VIP");
                

                return table;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public DataTable CreateTable(IList<CLIENTES_PJ> listOfRecords, String key)
        {
            try
            {
                DataTable tableRecords;
                DataRow newRow;

                tableRecords = new DataTable();
                CreateColumns(tableRecords);

                foreach (CLIENTES_PJ cliente in listOfRecords.Reverse())
                {
                    newRow = tableRecords.NewRow();

                    newRow[0] = cliente.COD_CLI;
                    newRow[1] = cliente.RAZAO_CLI;
                    newRow[2] = cliente.NOME_CLI;
                    newRow[3] = cliente.CNPJ_CLI;
                    newRow[4] = cliente.DTA_NSC_CLI.ToString("dd/MM/yyyy");
                    newRow[5] = cliente.TEL_CLI;
                    newRow[6] = cliente.RES_CLI;
                    newRow[7] = cliente.END_CLI;
                    newRow[8] = cliente.CEP_CLI;
                    newRow[9] = cliente.CID_CLI;
                    newRow[10] = cliente.EMAIL_CLI;
                    newRow[11] = cliente.VIP_CLI;
                    

                    tableRecords.Rows.Add(newRow);
                }

                return tableRecords;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public string Encrypt(String message, String key)
        {
            //return Util.Encryption.Encryptstring(message, key);
            return null;
        }

        public string Decrypt(String message, String key)
        {
            //return Util.Encryption.Decryptstring(message, key);
            return null;
        }
    }
}
